﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PDI
{
    public partial class Principal : Form
    {
        private Imagem bmpImagem1;
        private Imagem bmpImagem2;
        private Imagem bmpImagem3;
        private Imagem bmpHistograma;

        private Processador processador;

        public Principal()
        {
            InitializeComponent();
            bmpImagem3 = new Imagem(new Bitmap(200, 200));
            processador = new Processador();
        }

        private void btnImagem1_Click(object sender, EventArgs e)
        {
            // Exibe uma janela para seleção de arquivo.
            if (openDialog.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
            {
                try
                {
                    // Carrega a imagem.
                    imagem1.Load(openDialog.FileName);
                    bmpImagem1 = new Imagem(new Bitmap(imagem1.Image));
                }
                catch (Exception)
                {
                    MessageBox.Show("O arquivo selecionado não pode ser aberto!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("O carregamento da imagem foi cancelado pelo usuário!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnImagem2_Click(object sender, EventArgs e)
        {
            // Exibe uma janela para seleção de arquivo.
            if (openDialog.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
            {
                try
                {
                    // Carrega a imagem.
                    imagem2.Load(openDialog.FileName);
                    bmpImagem2 = new Imagem(new Bitmap(imagem2.Image));
                }
                catch (Exception)
                {
                    MessageBox.Show("O arquivo selecionado não pode ser aberto!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("O carregamento da imagem foi cancelado pelo usuário!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void imagem1_MouseMove(object sender, MouseEventArgs e)
        {
            try
            {
                x.Text = e.X.ToString();
                y.Text = e.Y.ToString();
                R.Text = bmpImagem1.getR(e.X, e.Y).ToString();
                G.Text = bmpImagem1.getG(e.X, e.Y).ToString();
                B.Text = bmpImagem1.getB(e.X, e.Y).ToString();
            }
            catch (Exception)
            {
            }
        }

        private void imagem2_MouseMove(object sender, MouseEventArgs e)
        {
            try
            {
                x.Text = e.X.ToString();
                y.Text = e.Y.ToString();
                R.Text = bmpImagem2.getR(e.X, e.Y).ToString();
                G.Text = bmpImagem2.getG(e.X, e.Y).ToString();
                B.Text = bmpImagem2.getB(e.X, e.Y).ToString();
            }
            catch (Exception)
            {
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            bmpImagem3.setRGB(1, 1, 255, 255, 0);
            bmpImagem3.setRGB(1, 2, 255, 255, 0);
            bmpImagem3.setRGB(1, 3, 255, 255, 0);
            bmpImagem3.setRGB(1, 4, 255, 255, 0);
            bmpImagem3.setRGB(1, 5, 255, 255, 0);
            bmpImagem3.setRGB(1, 6, 255, 255, 0);
            bmpImagem3.setRGB(1, 7, 255, 255, 0);
            atualizarImagem3();
        }

        public void atualizarImagem3()
        {
            imagem3.Image = bmpImagem3.getBitmap();
        }

        public void atualizarImagem2()
        {
            imagem2.Image = bmpImagem2.getBitmap();
        }

        public void atualizarHistograma()
        {
            ImagemHistograma.Image = bmpHistograma.getBitmap();
        }
        private void truncar_Click(object sender, EventArgs e)
        {
            if (adicao.Checked)
                bmpImagem3 = processador.ProcessarImagem(bmpImagem1, bmpImagem2, EnumTipoProcesso.Truncar_Adicao);
            if(subtracao.Checked)
                bmpImagem3 = processador.ProcessarImagem(bmpImagem1, bmpImagem2, EnumTipoProcesso.Truncar_Subtracao);
            if(multiplicacao.Checked)
                bmpImagem3 = processador.ProcessarImagem(bmpImagem1, bmpImagem2, EnumTipoProcesso.Truncar_Multiplicacao);
            if(divisao.Checked)
                bmpImagem3 = processador.ProcessarImagem(bmpImagem1, bmpImagem2, EnumTipoProcesso.Truncar_Divisao);

            atualizarImagem3();
        }

        private void normalizar_Click(object sender, EventArgs e)
        {
            if (adicao.Checked)
                bmpImagem3 = processador.ProcessarImagem(bmpImagem1, bmpImagem2, EnumTipoProcesso.Normalizar_Adicao);
            if (subtracao.Checked)
                bmpImagem3 = processador.ProcessarImagem(bmpImagem1, bmpImagem2, EnumTipoProcesso.Normalizar_Subtracao);
            if (multiplicacao.Checked)
                bmpImagem3 = processador.ProcessarImagem(bmpImagem1, bmpImagem2, EnumTipoProcesso.Normalizar_Multiplicacao);
            if (divisao.Checked)
                bmpImagem3 = processador.ProcessarImagem(bmpImagem1, bmpImagem2, EnumTipoProcesso.Normalizar_Divisao);

            atualizarImagem3();
        }

        private void ftrMediano_Click(object sender, EventArgs e)
        {

        }

        private void Principal_Load(object sender, EventArgs e)
        {

        }

        private void y_Click(object sender, EventArgs e)
        {

        }

        private void x_Click(object sender, EventArgs e)
        {

        }

        private void lblY_Click(object sender, EventArgs e)
        {

        }

        private void lblX_Click(object sender, EventArgs e)
        {

        }

        private void operacoesAritmeticas_Enter(object sender, EventArgs e)
        {

        }

        private void imagem3_Click(object sender, EventArgs e)
        {

        }

        private void lblImagem3_Click(object sender, EventArgs e)
        {

        }

        private void imagem2_Click(object sender, EventArgs e)
        {

        }

        private void lblImagem2_Click(object sender, EventArgs e)
        {

        }

        private void imagem1_Click(object sender, EventArgs e)
        {

        }

        private void lblImagem1_Click(object sender, EventArgs e)
        {

        }

        private void B_Click(object sender, EventArgs e)
        {

        }

        private void lblB_Click(object sender, EventArgs e)
        {

        }

        private void G_Click(object sender, EventArgs e)
        {

        }

        private void lblG_Click(object sender, EventArgs e)
        {

        }

        private void R_Click(object sender, EventArgs e)
        {

        }

        private void lblR_Click(object sender, EventArgs e)
        {

        }

        private void btnOcr_Click(object sender, EventArgs e)
        {
            // Passo 1 - Aplicar a Máscara de Sobel

            bmpImagem3 = Mascaras.MascaraDeSobelVertical(bmpImagem1);

            atualizarImagem3();

            bmpHistograma = Histograma.aplicarHistogramaVertical(bmpImagem3);

            atualizarHistograma();

            bmpImagem2 = Histograma.encontrar30PocentoMaiores(bmpImagem3, bmpHistograma);

            //atualizarImagem2();

        }
    }
}
